#include "XmlInfoObjet.hpp"

/**
 * Constructeur standard, qui initialise la classe mère et les
 * attributs spécifiques à l'objet.
 *
 * @param[in] nomFichier nom du fichier XML lu.
 * @param[in] id numéro d'identification de l'objet.
 * @param[in] nom nom de l'objet.
 * @param[in] quantite nombre d'objet du même type en stock.
 * @param[in] typeObjet type de l'objet (ressource ou equipement).
 */
XmlInfoObjet::XmlInfoObjet( const QString& nomFichier, const unsigned& id,
			    const QString& nom, const unsigned& quantite,
			    const EnumTypeObjet& typeObjet )
  : XmlInfoNom( nomFichier, id, nom ), Quantite( quantite ),
    TypeObjet( typeObjet )
{}

/**
 * Constructeur de copie, permettant de dupliquer une instance de
 * %XmlInfoObjet.
 *
 * @param[in] identifiant instance de %XmlInfoObjet à copier.
 */
XmlInfoObjet::XmlInfoObjet( const XmlInfoObjet& objet )
  : XmlInfoNom( objet ),
    Quantite( objet.quantite() ),
    TypeObjet( objet.typeObjet() ),
    DateFin( objet.dateFin() )
{}

/**
 * Le destructeur n'au rien de particulier à faire.
 */
XmlInfoObjet::~XmlInfoObjet()
{}

/**
 * Opérateur d'affectation, permettant de copier le contenu d'une
 * instance de %XmlInfoObjet dans l'instance courante.
 *
 * @param[in] identifiant instance de %XmlInfoObjet à copier.
 *
 * @return une référence sur l'instance courante.
 */
XmlInfoObjet& XmlInfoObjet::operator=( const XmlInfoObjet& objet )
{
  if ( &objet != this )
    {
      this -> XmlInfoNom::operator=( objet );

      Quantite  = objet.quantite();
      TypeObjet = objet.typeObjet();
      DateFin   = objet.dateFin();
    }

  return *this;
}

/**
 * Permet d'accéder à la quantité d'objet en stock.
 *
 * @return une référence constante sur Quantite.
 */
const unsigned& XmlInfoObjet::quantite() const
{
  return Quantite;
}

/**
 * Permet d'accéder au type d'objet en stock.
 *
 * @return une référence constante sur TypeObjet.
 */
const EnumTypeObjet& XmlInfoObjet::typeObjet() const
{
  return TypeObjet;
}

/**
 * Permet d'accéder à la date de fin de fabrication de l'objet.
 *
 * @return une référence constante sur DateFin.
 */
const QDateTime& XmlInfoObjet::dateFin() const
{
  return DateFin;
}

/**
 * Permet de changer la quantité d'objets en stock.
 *
 * @param[in] quantite nouvelle valeur de Quantite.
 */
void XmlInfoObjet::setQuantite( const unsigned& quantite )
{
  Quantite = quantite;
}

/**
 * Permet de changer le type d'objets en stock.
 *
 * @param[in] typeObjet nouvelle valeur de TypeObjet.
 */
void XmlInfoObjet::setTypeObjet( const EnumTypeObjet& typeObjet )
{
  TypeObjet = typeObjet;
}

/**
 * Permet de changer la date de fin de fabrication de l'objet.
 *
 * @param[in] dateFin nouvelle valeur de DateFin.
 */
void XmlInfoObjet::setDateFin( const QDateTime& dateFin )
{
  DateFin = dateFin;
}
